home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
PROGRAM
/
CBGRX100.ARJ
/
CLIPPING.H
< prev
next >
Wrap
Text File
|
1992-04-10
|
4KB
|
105 lines
/**
** CLIPPING.H
**
** Copyright (C) 1992, Csaba Biegl
** 820 Stirrup Dr, Nashville, TN, 37221
** csaba@vuse.vanderbilt.edu
**
** This file is distributed under the terms listed in the document
** "copying.cb", available from the author at the address above.
** A copy of "copying.cb" should accompany this file; if not, a copy
** should be available from where this file was obtained. This file
** may not be distributed without a verbatim copy of "copying.cb".
** You should also have received a copy of the GNU General Public
** License along with this program (it is in the file "copying");
** if not, write to the Free Software Foundation, Inc., 675 Mass Ave,
** Cambridge, MA 02139, USA.
**
** This program is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
** GNU General Public License for more details.
**/
#ifndef _CLIPPING_H_
#define _CLIPPING_H_
#define INSIDE 0
#define CLIPPED 1
#define OUTSIDE 2
#ifndef WHEN_CLIPPED
#define WHEN_CLIPPED
#endif
#ifndef WHEN_OUTSIDE
#define WHEN_OUTSIDE return
#endif
#define CLIPDOT(c,xx,yy) { \
if((xx > c->gc_xcliphi) || (xx < c->gc_xcliplo)) { WHEN_OUTSIDE; } \
if((yy > c->gc_ycliphi) || (yy < c->gc_ycliplo)) { WHEN_OUTSIDE; } \
}
#define CLIPDOTTOCONTEXT(c,xx,yy) { \
if((xx > c->gc_xmax) || (xx < 0)) { WHEN_OUTSIDE; } \
if((yy > c->gc_ymax) || (yy < 0)) { WHEN_OUTSIDE; } \
}
#define CLIPHLINE(c,x1,x2,yy) { \
if(x1 > x2) EXCHG(x1,x2); \
if((x1 > c->gc_xcliphi) || (x2 < c->gc_xcliplo)) { WHEN_OUTSIDE; } \
if((yy > c->gc_ycliphi) || (yy < c->gc_ycliplo)) { WHEN_OUTSIDE; } \
if(x1 < c->gc_xcliplo) { x1 = c->gc_xcliplo; WHEN_CLIPPED; } \
if(x2 > c->gc_xcliphi) { x2 = c->gc_xcliphi; WHEN_CLIPPED; } \
}
#define CLIPVLINE(c,xx,y1,y2) { \
if(y1 > y2) EXCHG(y1,y2); \
if((xx > c->gc_xcliphi) || (xx < c->gc_xcliplo)) { WHEN_OUTSIDE; } \
if((y1 > c->gc_ycliphi) || (y2 < c->gc_ycliplo)) { WHEN_OUTSIDE; } \
if(y1 < c->gc_ycliplo) { y1 = c->gc_ycliplo; WHEN_CLIPPED; } \
if(y2 > c->gc_ycliphi) { y2 = c->gc_ycliphi; WHEN_CLIPPED; } \
}
#define CLIPBOXTEST(c,x1,y1,x2,y2) { \
if((x1 > c->gc_xcliphi) || (x2 < c->gc_xcliplo)) { WHEN_OUTSIDE; } \
if((y1 > c->gc_ycliphi) || (y2 < c->gc_ycliplo)) { WHEN_OUTSIDE; } \
}
#define CLIPBOXSORTANDTEST(c,x1,y1,x2,y2) { \
if(x1 > x2) EXCHG(x1,x2); \
if(y1 > y2) EXCHG(y1,y2); \
CLIPBOXTEST(c,x1,y1,x2,y2); \
}
#define CLIPBOX(c,x1,y1,x2,y2) { \
CLIPBOXSORTANDTEST(c,x1,y1,x2,y2); \
if(x1 < c->gc_xcliplo) { x1 = c->gc_xcliplo; WHEN_CLIPPED; } \
if(y1 < c->gc_ycliplo) { y1 = c->gc_ycliplo; WHEN_CLIPPED; } \
if(x2 > c->gc_xcliphi) { x2 = c->gc_xcliphi; WHEN_CLIPPED; } \
if(y2 > c->gc_ycliphi) { y2 = c->gc_ycliphi; WHEN_CLIPPED; } \
}
#define CLIPSORTEDBOX(c,x1,y1,x2,y2) { \
CLIPBOXTEST(c,x1,y1,x2,y2); \
if(x1 < c->gc_xcliplo) { x1 = c->gc_xcliplo; WHEN_CLIPPED; } \
if(y1 < c->gc_ycliplo) { y1 = c->gc_ycliplo; WHEN_CLIPPED; } \
if(x2 > c->gc_xcliphi) { x2 = c->gc_xcliphi; WHEN_CLIPPED; } \
if(y2 > c->gc_ycliphi) { y2 = c->gc_ycliphi; WHEN_CLIPPED; } \
}
#define CLIPBOXTOCONTEXT(c,x1,y1,x2,y2) { \
if(x1 > x2) EXCHG(x1,x2); \
if(y1 > y2) EXCHG(y1,y2); \
if((x1 > c->gc_xmax) || (x2 < 0)) { WHEN_OUTSIDE; } \
if((y1 > c->gc_ymax) || (y2 < 0)) { WHEN_OUTSIDE; } \
if(x1 < 0) { x1 = 0; WHEN_CLIPPED; } \
if(y1 < 0) { y1 = 0; WHEN_CLIPPED; } \
if(x2 > c->gc_xmax) { x2 = c->gc_xmax; WHEN_CLIPPED; } \
if(y2 > c->gc_ymax) { y2 = c->gc_ymax; WHEN_CLIPPED; } \
}
#endif /* whole file */